PM2、Nginx & Reverse Proxy Server


Posted by Christy on 2022-02-13

本文為 Lidemy [BE201] > [部署:Nginx + PM2] 的讀書筆記

一、PM2 簡介

1. 安裝:npm install pm2 -g

2. pm2 ls:看 PM2 有跑哪些東西

3. pm2 start index.js:在相對應資料夾底下執行,可以跑寫好的程式

輸入熟悉的網址 http://localhost:5001/,就跑起來了。

4. pm2 logs 0:0 代表 id,可以看到該程式的 log

5. pm2 info 0:可看到詳細資訊

6. pm2 stop 0:終止程式

7. pm2 restart 0:重跑一次

8. pm2 delete 0:移除程式

二、為什麼我們需要 Nginx?

1. Proxy 代理:request 經由代理伺服器,發送到目的地

優點:

a. server 不知道 client 的真實身份,可以把 client 藏起來

b. 可以進入 ip 限制的網站,類似翻牆原理

c. Proxy server 有 cache,可以直接發送給 client 端,會比較快拿到結果

缺點:惡意的 proxy server 可以把使用者導到釣魚網站

2. 反向代理 Reverse Proxy Server

實作原理:client 端發送請求到伺服器時,伺服器再轉發到其他伺服器,client 不知道 server 的真實身份,把 server 藏起來。

如何知道有沒有經過 proxy server?幾乎沒有辦法知道。

為什麼要用反向代理?

因為只有一個伺服器可以佔用 80 port

一台主機可以放很多服務,如果要放三、四個服務,那其他的服務的網址就會變成 http://www.service.com:3306 之類的,蠻奇怪的。

因此在 80 port 上放反向代理伺服器,就可以根據客戶端的參數,藉由參數設定的 sub domain,把請求轉到不同的地方去。

ip: 1.1.1.1

1.1.1.1:80 Reverse Proxy Server

aaa.cs49.tw → 1.1.1.1 → nginx → 4001

bbb.cs49.tw → 1.1.1.1 → nginx → 5001

另一個好處是,別人看不出來你在內部使用哪一個 port

三、Nginx 實戰

1. 設定 gandi 域名

2. 利用 pm2 delete 0:移除程式

3. 如果有問題,ufw status 確認狀況;ufw allow 80,要先打開權限

4. systemctl status nginx:看 nginx 目前狀態

5. systemctl start nginx:把 nginx 跑起來

這時連到設定好的 port 應該連得進去

6. 修改 index.js 設定檔裡面的 port

7. pm2 start index.js

要驗證的話,可以輸入網址,後面接 port,不過要先把 port 的防火牆打開:ufw allow port number

8. 找到設定檔:/etc/nginx/sites-available/example.com

a. cd /etc/nginx

b. cd sites-available

c. 新增設定檔:

server {
        // 一律填 80 port
        listen 80;
        // 填自己的網址
        server_name example.com www.example.com;
        // 改成自己的 port
        location / {
                proxy_pass http://127.0.0.1:5566;
        }
}

9. systemctl reload nginx

10. ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

再重複步驟 9










Related Posts

The introduction and difference between class component and function component in React

The introduction and difference between class component and function component in React

CLI 常用指令整理

CLI 常用指令整理

JavaScript Object

JavaScript Object


Comments